package com.webank.oracle.test.transaction.bac.blindBox;

import org.fisco.bcos.channel.client.TransactionSucCallback;
import org.fisco.bcos.channel.event.filter.EventLogPushWithDecodeCallback;
import org.fisco.bcos.web3j.abi.EventEncoder;
import org.fisco.bcos.web3j.abi.FunctionEncoder;
import org.fisco.bcos.web3j.abi.FunctionReturnDecoder;
import org.fisco.bcos.web3j.abi.TypeReference;
import org.fisco.bcos.web3j.abi.datatypes.Address;
import org.fisco.bcos.web3j.abi.datatypes.Bool;
import org.fisco.bcos.web3j.abi.datatypes.DynamicArray;
import org.fisco.bcos.web3j.abi.datatypes.DynamicBytes;
import org.fisco.bcos.web3j.abi.datatypes.Event;
import org.fisco.bcos.web3j.abi.datatypes.Function;
import org.fisco.bcos.web3j.abi.datatypes.Type;
import org.fisco.bcos.web3j.abi.datatypes.Utf8String;
import org.fisco.bcos.web3j.abi.datatypes.generated.Bytes32;
import org.fisco.bcos.web3j.abi.datatypes.generated.Uint256;
import org.fisco.bcos.web3j.crypto.Credentials;
import org.fisco.bcos.web3j.crypto.EncryptType;
import org.fisco.bcos.web3j.protocol.Web3j;
import org.fisco.bcos.web3j.protocol.core.RemoteCall;
import org.fisco.bcos.web3j.protocol.core.methods.response.Log;
import org.fisco.bcos.web3j.protocol.core.methods.response.TransactionReceipt;
import org.fisco.bcos.web3j.tuples.generated.Tuple1;
import org.fisco.bcos.web3j.tuples.generated.Tuple2;
import org.fisco.bcos.web3j.tuples.generated.Tuple4;
import org.fisco.bcos.web3j.tuples.generated.Tuple6;
import org.fisco.bcos.web3j.tx.Contract;
import org.fisco.bcos.web3j.tx.TransactionManager;
import org.fisco.bcos.web3j.tx.gas.ContractGasProvider;
import org.fisco.bcos.web3j.tx.txdecode.TransactionDecoder;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;

/**
 * <p>Auto generated code.
 * <p><strong>Do not modify!</strong>
 * <p>Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>,
 * or the org.fisco.bcos.web3j.codegen.SolidityFunctionWrapperGenerator in the 
 * <a href="https://github.com/web3j/web3j/tree/master/codegen">codegen module</a> to update.
 *
 * <p>Generated with web3j version none.
 */
@SuppressWarnings("unchecked")
public class CatBlindbox extends Contract {
    public static final String[] BINARY_ARRAY = {"60806040526040518060e001604052806040518060400160405280601281526020017f416d65726963616e2053686f727468616972000000000000000000000000000081525081526020016040518060400160405280601181526020017f427269746973682053686f72746861697200000000000000000000000000000081525081526020016040518060400160405280601081526020017f4a6170616e65736520426f627461696c0000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4368696e657365204f72616e676500000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5275737369616e20426c7565000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f5065727369616e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f526167646f6c6c00000000000000000000000000000000000000000000000000815250815250600f906007620001bc929190620008fd565b506040518060e001604052806040518060800160405280604781526020016200660660479139815260200160405180608001604052806047815260200162006534604791398152602001604051806080016040528060478152602001620064a6604791398152602001604051806080016040528060448152602001620065c26044913981526020016040518060800160405280604781526020016200657b6047913981526020016040518060800160405280604781526020016200645f604791398152602001604051806080016040528060478152602001620064ed604791398152506016906007620002b1929190620008fd565b50348015620002bf57600080fd5b506040516200664d3803806200664d8339818101604052810190620002e5919062000a9a565b6040518060400160405280601181526020017f436174426c696e64426f785365726965730000000000000000000000000000008152506040518060400160405280600381526020017f43617400000000000000000000000000000000000000000000000000000000008152506200036233620006bd60201b60201c565b62000373336200071e60201b60201c565b6000600260006101000a81548160ff0219169083151502179055508160079080519060200190620003a692919062000957565b508060089080519060200190620003bf92919062000957565b50505033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008090505b6007811015620006b557601d6040518060400160405280600f8460078110620004ec57fe5b018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620005855780601f10620005595761010080835404028352916020019162000585565b820191906000526020600020905b8154815290600101906020018083116200056757829003601f168201915b50505050508152602001601684600781106200059d57fe5b018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620006365780601f106200060a5761010080835404028352916020019162000636565b820191906000526020600020905b8154815290600101906020018083116200061857829003601f168201915b5050505050815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000190805190602001906200068592919062000957565b506020820151816001019080519060200190620006a492919062000957565b5050508080600101915050620004c7565b505062000c13565b620006d88160006200077f60201b620025211790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f05e7c881d716bee8cb7ed92293133ba156704252439e5c502c277448f04e20c260405160405180910390a250565b620007398160016200077f60201b620025211790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167ff4fbb5a5e62a703643fe5be0722720f728980fdde74f11d76eca7e13bdc3301d60405160405180910390a250565b6200079182826200083260201b60201c565b15620007d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cb9062000b70565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089d9062000b92565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b826007810192821562000944579160200282015b82811115620009435782518290805190602001906200093292919062000957565b509160200191906001019062000911565b5b509050620009539190620009de565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200099a57805160ff1916838001178555620009cb565b82800160010185558215620009cb579182015b82811115620009ca578251825591602001919060010190620009ad565b5b509050620009da919062000a0f565b5090565b62000a0c91905b8082111562000a085760008181620009fe919062000a37565b50600101620009e5565b5090565b90565b62000a3491905b8082111562000a3057600081600090555060010162000a16565b5090565b90565b50805460018160011615610100020316600290046000825580601f1062000a5f575062000a80565b601f01602090049060005260206000209081019062000a7f919062000a0f565b5b50565b60008151905062000a948162000bf9565b92915050565b60006020828403121562000aad57600080fd5b600062000abd8482850162000a83565b91505092915050565b600062000ad5601f8362000bb4565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b600062000b1760228362000bb4565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000602082019050818103600083015262000b8b8162000ac6565b9050919050565b6000602082019050818103600083015262000bad8162000b08565b9050919050565b600082825260208201905092915050565b600062000bd28262000bd9565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b62000c048162000bc5565b811462000c1057600080fd5b50565b61583c8062000c236000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638f32d59b1161011a578063c2ac8ff3116100ad578063e3d670d71161007c578063e3d670d7146105f5578063e6400bbe14610625578063e985e9c51461062f578063f1c689821461065f578063f2fde38b1461068f57610206565b8063c2ac8ff314610581578063c8350362146105b1578063d0e7d611146105cf578063d7fb71c9146105eb57610206565b8063a22cb465116100e9578063a22cb465146104e2578063b440846f146104fe578063b973322a1461052e578063be1c766b1461056357610206565b80638f32d59b1461045a5780639126d03c14610478578063938050e1146104a85780639b2e1d5c146104b257610206565b80635de32ef51161019d5780637a48f11a1161016c5780637a48f11a146103a45780637ee9f3bd146103d45780637f6d99e5146103f0578063877b9a671461040c5780638da5cb5b1461043c57610206565b80635de32ef5146103035780636352211e14610338578063702efdf3146103685780637284e4161461038657610206565b8063181ba3b7116101d9578063181ba3b71461029157806320694db0146102c1578063452dee28146102dd57806357a70df8146102e757610206565b806303dfd47c1461020b578063081812fc14610227578063095ea7b31461025757806318160ddd14610273575b600080fd5b610225600480360381019061022091906140f4565b6106ab565b005b610241600480360381019061023c91906140a2565b610747565b60405161024e9190614e8c565b60405180910390f35b610271600480360381019061026c9190613f2f565b6107cc565b005b61027b6109be565b6040516102889190615485565b60405180910390f35b6102ab60048036038101906102a6919061414c565b6109cb565b6040516102b89190614fb2565b60405180910390f35b6102db60048036038101906102d69190613d68565b610b84565b005b6102e5610bd8565b005b61030160048036038101906102fc9190613d68565b610be3565b005b61031d600480360381019061031891906140a2565b610c37565b60405161032f969594939291906154d0565b60405180910390f35b610352600480360381019061034d91906140a2565b610ef5565b60405161035f9190614e8c565b60405180910390f35b610370610fa7565b60405161037d9190614f97565b60405180910390f35b61038e610fbe565b60405161039b9190615043565b60405180910390f35b6103be60048036038101906103b99190613f2f565b611060565b6040516103cb9190615485565b60405180910390f35b6103ee6004803603","8101906103e99190614027565b611109565b005b61040a60048036038101906104059190613e48565b611778565b005b61042660048036038101906104219190613d68565b6118e2565b6040516104339190614f97565b60405180910390f35b6104446118ff565b6040516104519190614e8c565b60405180910390f35b610462611929565b60405161046f9190614f97565b60405180910390f35b610492600480360381019061048d9190613d68565b611981565b60405161049f9190614f97565b60405180910390f35b6104b061199e565b005b6104cc60048036038101906104c79190613d68565b6119a9565b6040516104d99190614f75565b60405180910390f35b6104fc60048036038101906104f79190613ef3565b611a40565b005b610518600480360381019061051391906140a2565b611bfc565b6040516105259190615485565b60405180910390f35b610548600480360381019061054391906140a2565b611c66565b60405161055a969594939291906154d0565b60405180910390f35b61056b611e97565b6040516105789190615485565b60405180910390f35b61059b60048036038101906105969190613f6b565b611ea4565b6040516105a89190614f97565b60405180910390f35b6105b9611f0f565b6040516105c69190615043565b60405180910390f35b6105e960048036038101906105e49190613dcd565b611fb1565b005b6105f36120a7565b005b61060f600480360381019061060a9190613d68565b612192565b60405161061c9190615485565b60405180910390f35b61062d612251565b005b61064960048036038101906106449190613d91565b61233d565b6040516106569190614f97565b60405180910390f35b610679600480360381019061067491906140a2565b6123d1565b6040516106869190615043565b60405180910390f35b6106a960048036038101906106a49190613d68565b6124ce565b005b6106b533846125c9565b6106f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106eb90615145565b60405180910390fd5b6107428383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506126a7565b505050565b6000610752826126be565b610791576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610788906151c5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600260009054906101000a900460ff161561081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081390615465565b60405180910390fd5b600061082782610ef5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f90615165565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108d857506108d7813361233d565b5b610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e90615185565b60405180910390fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584846040516109b1929190614f4c565b60405180910390a2505050565b6000600c80549050905090565b600080601d8054905011610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b906152a5565b60405180910390fd5b6000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b37217a4856040518263ffffffff1660e01b8152600401610a719190615485565b602060405180830381600087803b158015610a8b57600080fd5b505af1158015610a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac39190614050565b905082601f60008381526020019081526020016000209080519060200190610aec9291906138ee565b50336020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3715a27895dd14dc65d78494fb8fb93075aa149c0dfa0f2a175046aedf59d46c338483604051610b7293929190614f0e565b60405180910390a18091505092915050565b610b8d336118e2565b610bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc390615225565b60405180910390fd5b610bd581612730565b50565b610be13361278a565b565b610bec33611981565b610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2290615245565b60405180910390fd5b610c34816127e4565b50565b60006060806000806060610c4961396e565b601e8881548110610c5657fe5b90600052602060002090600602016040518060c001604052908160008201548152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610db45780601f10610d8957610100808354040283529160200191610db4565b820191906000526020600020905b815481529060010190602001808311610d9757829003601f168201915b50505050508152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600582018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610eb65780601f10610e8b57610100808354040283529160200191610eb6565b820191906000526020600020905b815481529060010190602001808311610e9957829003601f168201915b5050505050815250509050806000015181602001518260400151836060015184608001518560a001519650965096509650965096505091939550919395565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9590615425565b60405180910390fd5b80915050919050565b6000600260009054906101000a900460ff16905090565b606060078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110565780601f1061102b57610100808354040283529160200191611056565b820191906000526020600020905b81548152906001019060200180831161103957829003601f168201915b5050505050905090565b600061106b83612192565b82106110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390615305565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106110f657fe5b9060005260206000200154905092915050565b6000601d8054905011611151576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611148906152a5565b60405180910390fd5b60001515602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c75f695a836040518263ffffffff1660e01b81526004016111b09190614fb2565b60206040518083038186803b1580156111c857600080fd5b505afa1580156111dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112009190613ffe565b151514611242576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611239906153e5565b60405180910390fd5b6000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632dff0d0d836040518263ffffffff1660e01b815260040161129f9190614fb2565b60206040518083038186803b1580156112b757600080fd5b505afa1580156112cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef91906140cb565b90506000601d80549050828161130157fe5b0690506060601f60008581526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113ad5780601f10611382576101008083540402835291602001916113ad565b820191906000526020600020905b81548152906001019060200180831161139057829003601f168201915b505050505090506113bc6139ba565b601d8360ff16815481106113cc57fe5b90600052602060002090600202016040","51806040016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561147e5780601f106114535761010080835404028352916020019161147e565b820191906000526020600020905b81548152906001019060200180831161146157829003601f168201915b50505050508152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115205780601f106114f557610100808354040283529160200191611520565b820191906000526020600020905b81548152906001019060200180831161150357829003601f168201915b50505050508152505090506115348361283e565b60004290506000601e805490509050601e6040518060c0016040528083815260200186815260200185600001518152602001848152602001602060008b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001856020015181525090806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010190805190602001906116129291906138ee565b50604082015181600201908051906020019061162f9291906138ee565b506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a082015181600501908051906020019061169d9291906138ee565b5050506116f26020600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682856020015160405180602001604052806000815250611ea4565b507f5360cbf98a3d257ddc33c57948364330a1d78a96c34d08da1e01721bbc73d25e8785856000015185602060008d815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886020015160405161176796959493929190614fcd565b60405180910390a150505050505050565b600260009054906101000a900460ff16156117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf90615465565b60405180910390fd5b815183511461180c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611803906153a5565b60405180910390fd5b60008090505b83518110156118db57600073ffffffffffffffffffffffffffffffffffffffff1684828151811061183f57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561189e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189590615205565b60405180910390fd5b6118d0858583815181106118ae57fe5b60200260200101518584815181106118c257fe5b602002602001015185611fb1565b806001019050611812565b5050505050565b60006118f882600061291990919063ffffffff16565b9050919050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600061199782600161291990919063ffffffff16565b9050919050565b6119a7336129e1565b565b6060600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611a3457602002820191906000526020600020905b815481526020019060010190808311611a20575b50505050509050919050565b600260009054906101000a900460ff1615611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8790615465565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906151a5565b60405180910390fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bf09190614f97565b60405180910390a35050565b6000611c066109be565b8210611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90615265565b60405180910390fd5b600c8281548110611c5457fe5b90600052602060002001549050919050565b601e8181548110611c7357fe5b9060005260206000209060060201600091509050806000015490806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d255780601f10611cfa57610100808354040283529160200191611d25565b820191906000526020600020905b815481529060010190602001808311611d0857829003601f168201915b505050505090806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611dc35780601f10611d9857610100808354040283529160200191611dc3565b820191906000526020600020905b815481529060010190602001808311611da657829003601f168201915b5050505050908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806005018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611e8d5780601f10611e6257610100808354040283529160200191611e8d565b820191906000526020600020905b815481529060010190602001808311611e7057829003601f168201915b5050505050905086565b6000601d80549050905090565b6000611eaf336118e2565b611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee590615225565b60405180910390fd5b611ef9858584612a3b565b611f038484612c24565b60019050949350505050565b606060088054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fa75780601f10611f7c57610100808354040283529160200191611fa7565b820191906000526020600020905b815481529060010190602001808311611f8a57829003601f168201915b5050505050905090565b600260009054906101000a900460ff1615612001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff890615465565b60405180910390fd5b61200b33836125c9565b61204a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612041906150e5565b60405180910390fd5b61205684848484612c98565b61206284848484612eff565b6120a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209890615105565b60405180910390fd5b50505050565b6120b033611981565b6120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e690615245565b60405180910390fd5b600260009054906101000a900460ff1661213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590615385565b60405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f349b4285cb8dde314c53fd9d8e8e578381a7375e4f76f9dd9fe07f9960f120a4336040516121889190614ea7565b60405180910390a1565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa90615065565b60405180910390fd5b61224a600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613016565b9050919050565b61225a33611981565b612299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229090615245565b60405180910390fd5b600260009054906101000a900460ff16156122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e090615465565b60405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f6f123d3d54c84a7960a573b31c221dcd86e13fd849c5adb0c6ca851468cc1ae4336040516123339190614ea7565b60405180910390a1565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606123dc826126be565b","61241b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241290615405565b60405180910390fd5b600960008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124c25780601f10612497576101008083540402835291602001916124c2565b820191906000526020600020905b8154815290600101906020018083116124a557829003601f168201915b50505050509050919050565b6124d6611929565b612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c906152c5565b60405180910390fd5b61251e81613024565b50565b61252b8282612919565b1561256b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612562906150c5565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006125d4826126be565b612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a90615445565b60405180910390fd5b600061261e83610ef5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061268d57508373ffffffffffffffffffffffffffffffffffffffff1661267584610747565b73ffffffffffffffffffffffffffffffffffffffff16145b8061269e575061269d818561233d565b5b91505092915050565b6126ba6126b383610ef5565b8383613154565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b61274481600061252190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f05e7c881d716bee8cb7ed92293133ba156704252439e5c502c277448f04e20c260405160405180910390a250565b61279e81600161336c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f17eb45856cd2283111eeb8a1dddf8a43121889e3ce798241f96d2afed353eaa360405160405180910390a250565b6127f881600161252190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167ff4fbb5a5e62a703643fe5be0722720f728980fdde74f11d76eca7e13bdc3301d60405160405180910390a250565b601d6001601d80549050038154811061285357fe5b9060005260206000209060020201601d8260ff168154811061287157fe5b9060005260206000209060020201600082018160000190805460018160011615610100020316600290046128a69291906139d4565b50600182018160010190805460018160011615610100020316600290046128ce9291906139d4565b50905050601d8054806128dd57fe5b6001900381819060005260206000209060020201600080820160006129029190613a5b565b6001820160006129129190613a5b565b5050905550565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561298a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612981906152e5565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129f581600061336c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167faf66545c919a3be306ee446d8f42a9558b5b022620df880517bc9593ec0f2d5260405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa290615325565b60405180910390fd5b612ab4826126be565b15612af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aeb90615345565b60405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612b8d600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613413565b8273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fec17194b787c395cc9a4b1d5c8e4af64ed927684ad21898f1fb21f8818bed71b8585604051612c049291906154a0565b60405180910390a4612c168383613429565b612c1f826134ed565b505050565b612c2d826126be565b612c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c63906153c5565b60405180910390fd5b80600960008481526020019081526020016000209080519060200190612c939291906138ee565b505050565b8373ffffffffffffffffffffffffffffffffffffffff16612cb883610ef5565b73ffffffffffffffffffffffffffffffffffffffff1614612d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d05906150a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7590615085565b60405180910390fd5b612d8782613536565b612dce600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206135f4565b612e15600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613413565b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fec17194b787c395cc9a4b1d5c8e4af64ed927684ad21898f1fb21f8818bed71b8585604051612edd9291906154a0565b60405180910390a4612eef8483613617565b612ef98383613429565b50505050565b6000612f208473ffffffffffffffffffffffffffffffffffffffff166137c0565b612f2d576001905061300e565b60008473ffffffffffffffffffffffffffffffffffffffff166331f6f50e338887876040518563ffffffff1660e01b8152600401612f6e9493929190614ec2565b602060405180830381600087803b158015612f8857600080fd5b505af1158015612f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc09190614079565b90506331f6f50e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308b90615125565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff1661317483610ef5565b73ffffffffffffffffffffffffffffffffffffffff16146131ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c190615365565b60405180910390fd5b6131d382613536565b61321a600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206135f4565b60006003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060096000848152602001908152602001600020805460018160011615610100020316600290049050146132bc576009600083815260200190815260200160002060006132bb9190613a5b565b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fec17194b787c395cc9a4b1d5c8e4af64ed927684ad21898f1fb21f8818bed71b85856040516133339291906154a0565b60405180910390a46133458383613617565b6000600b600084815260200190815260200160002081905550613367826137d3565b505050565b6133768282612919565b6133b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ac90615285565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffff","ffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6001816000016000828254019250508190555050565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600b600083815260200190815260200160002081905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150555050565b600c80549050600d600083815260200190815260200160002081905550600c81908060018154018082558091505060019003906000526020600020016000909190919091505550565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135f15760006004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61360c6001826000015461389890919063ffffffff16565b816000018190555050565b600061366f6001600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061389890919063ffffffff16565b90506000600b600084815260200190815260200160002054905081811461375c576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106136dc57fe5b9060005260206000200154905080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061373457fe5b906000526020600020018190555081600b600083815260200190815260200160002081905550505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806137a457fe5b6001900381819060005260206000200160009055905550505050565b600080823b905060008111915050919050565b60006137ee6001600c8054905061389890919063ffffffff16565b90506000600d60008481526020019081526020016000205490506000600c838154811061381757fe5b9060005260206000200154905080600c838154811061383257fe5b906000526020600020018190555081600d600083815260200190815260200160002081905550600c80548061386357fe5b600190038181906000526020600020016000905590556000600d60008681526020019081526020016000208190555050505050565b6000828211156138dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d4906151e5565b60405180910390fd5b600082840390508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061392f57805160ff191683800117855561395d565b8280016001018555821561395d579182015b8281111561395c578251825591602001919060010190613941565b5b50905061396a9190613aa3565b5090565b6040518060c0016040528060008152602001606081526020016060815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b604051806040016040528060608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a0d5780548555613a4a565b82800160010185558215613a4a57600052602060002091601f016020900482015b82811115613a49578254825591600101919060010190613a2e565b5b509050613a579190613aa3565b5090565b50805460018160011615610100020316600290046000825580601f10613a815750613aa0565b601f016020900490600052602060002090810190613a9f9190613aa3565b5b50565b613ac591905b80821115613ac1576000816000905550600101613aa9565b5090565b90565b600081359050613ad781615793565b92915050565b600082601f830112613aee57600080fd5b8135613b01613afc82615573565b615546565b91508181835260208401935060208101905083856020840282011115613b2657600080fd5b60005b83811015613b565781613b3c8882613ac8565b845260208401935060208301925050600181019050613b29565b5050505092915050565b600082601f830112613b7157600080fd5b8135613b84613b7f8261559b565b615546565b91508181835260208401935060208101905083856020840282011115613ba957600080fd5b60005b83811015613bd95781613bbf8882613d3e565b845260208401935060208301925050600181019050613bac565b5050505092915050565b600081359050613bf2816157aa565b92915050565b600081519050613c07816157aa565b92915050565b600081359050613c1c816157c1565b92915050565b600081519050613c31816157c1565b92915050565b600081519050613c46816157d8565b92915050565b60008083601f840112613c5e57600080fd5b8235905067ffffffffffffffff811115613c7757600080fd5b602083019150836001820283011115613c8f57600080fd5b9250929050565b600082601f830112613ca757600080fd5b8135613cba613cb5826155c3565b615546565b91508082526020830160208301858383011115613cd657600080fd5b613ce1838284615740565b50505092915050565b600082601f830112613cfb57600080fd5b8135613d0e613d09826155ef565b615546565b91508082526020830160208301858383011115613d2a57600080fd5b613d35838284615740565b50505092915050565b600081359050613d4d816157ef565b92915050565b600081519050613d62816157ef565b92915050565b600060208284031215613d7a57600080fd5b6000613d8884828501613ac8565b91505092915050565b60008060408385031215613da457600080fd5b6000613db285828601613ac8565b9250506020613dc385828601613ac8565b9150509250929050565b60008060008060808587031215613de357600080fd5b6000613df187828801613ac8565b9450506020613e0287828801613ac8565b9350506040613e1387828801613d3e565b925050606085013567ffffffffffffffff811115613e3057600080fd5b613e3c87828801613c96565b91505092959194509250565b60008060008060808587031215613e5e57600080fd5b6000613e6c87828801613ac8565b945050602085013567ffffffffffffffff811115613e8957600080fd5b613e9587828801613add565b935050604085013567ffffffffffffffff811115613eb257600080fd5b613ebe87828801613b60565b925050606085013567ffffffffffffffff811115613edb57600080fd5b613ee787828801613c96565b91505092959194509250565b60008060408385031215613f0657600080fd5b6000613f1485828601613ac8565b9250506020613f2585828601613be3565b9150509250929050565b60008060408385031215613f4257600080fd5b6000613f5085828601613ac8565b9250506020613f6185828601613d3e565b9150509250929050565b60008060008060808587031215613f8157600080fd5b6000613f8f87828801613ac8565b9450506020613fa087828801613d3e565b935050604085013567ffffffffffffffff811115613fbd57600080fd5b613fc987828801613cea565b925050606085013567ffffffffffffffff811115613fe657600080fd5b613ff287828801613c96565b91505092959194509250565b60006020828403121561401057600080fd5b600061401e84828501613bf8565b91505092915050565b60006020828403121561403957600080fd5b600061404784828501613c0d565b91505092915050565b60006020828403121561406257600080fd5b600061407084828501613c22565b91505092915050565b60006020828403121561408b57600080fd5b600061409984828501613c37565b91505092915050565b6000602082840312156140b457600080fd5b60006140c284828501613d3e565b91505092915050565b6000602082840312156140dd57600080fd5b60006140eb84828501613d53565b91505092915050565b60008060006040848603121561410957600080fd5b600061411786828701613d3e565b935050602084013567ffffffffffffffff81111561413457600080fd5b61414086828701613c4c565b92509250509250925092565b6000806040838503121561415f57600080fd5b600061416d85828601613d3e565b925050602083013567ffffffffffffffff81111561418a57600080fd5b61419685828601613cea565b9150509250929050565b60006141ac8383614e6e565b60208301905092915050565b6141c18161570a565b82525050565b6141d08161568c565b82525050565b60006141e18261562b565b6141eb8185615659565b93506141f68361561b565b8060005b8381101561422757815161420e88826141a0565b97506142198361564c565b9250506001810190506141fa565b5085935050505092915050565b61423d8161569e565b82525050565b61424c816156aa565b82525050565b600061425d82615636565b614267818561566a565b935061427781856020860161574f565b61428081615782565b840191505092915050565b600061429682615641565b6142a0818561567b565b93506142b081856020860161574f565b6142b981615782565b840191505092915050565b60006142d1602a8361567b565b91507f4241433030323a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061433760208361567b565b91507f4241433030323a2073656e6420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061437760258361567b565b91507f4241433030323a2073656e64206f662061737365742074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143dd601f8361567b56","5b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b600061441d602d8361567b565b91507f4241433030323a2073656e642063616c6c6572206973206e6f74206f776e657260008301527f206e6f7220617070726f766564000000000000000000000000000000000000006020830152604082019050919050565b6000614483602e8361567b565b91507f4241433030323a2073656e6420746f206e6f6e2042414330303252656365697660008301527f657220696d706c656d656e7465720000000000000000000000000000000000006020830152604082019050919050565b60006144e960268361567b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061454f60308361567b565b91507f4241433030324275726e61626c653a2063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f766564000000000000000000000000000000006020830152604082019050919050565b60006145b560218361567b565b91507f4241433030323a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061461b60388361567b565b91507f4241433030323a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061468160198361567b565b91507f4241433030323a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006146c1602c8361567b565b91507f4241433030323a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420617373657400000000000000000000000000000000000000006020830152604082019050919050565b6000614727601e8361567b565b91507f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006000830152602082019050919050565b600061476760258361567b565b91507f64657374696e6174696f6e2061646472657373206d757374206265206e6f6e2d60008301527f7a65726f2e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006147cd60308361567b565b91507f497373756572526f6c653a2063616c6c657220646f6573206e6f74206861766560008301527f207468652049737375657220726f6c65000000000000000000000000000000006020830152604082019050919050565b600061483360368361567b565b91507f53757370656e646572526f6c653a2063616c6c657220646f6573206e6f74206860008301527f617665207468652053757370656e64657220726f6c65000000000000000000006020830152604082019050919050565b6000614899602c8361567b565b91507f424143303032456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006148ff60218361567b565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614965601c8361567b565b91507f546865726520617265206e6f20626c696e6420626f78206361747321000000006000830152602082019050919050565b60006149a560208361567b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006149e560228361567b565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a4b602b8361567b565b91507f424143303032456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000614ab160208361567b565b91507f4241433030323a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614af1601c8361567b565b91507f4241433030323a20617373657420616c7265616479206d696e746564000000006000830152602082019050919050565b6000614b3160288361567b565b91507f4241433030323a2064657374726f79206f66206173736574207468617420697360008301527f206e6f74206f776e0000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614b97601a8361567b565b91507f53757370656e6461626c653a206e6f742073757370656e6465640000000000006000830152602082019050919050565b6000614bd760278361567b565b91507f746f20616e642061737365744964206172726179206c656e676874206d75737460008301527f206d617463682e000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614c3d602c8361567b565b91507f4241433030324d657461646174613a2055524920736574206f66206e6f6e657860008301527f697374656e7420617373657400000000000000000000000000000000000000006020830152604082019050919050565b6000614ca360258361567b565b91507f206f7261636c6520717565727920686173206e6f74206265656e2066756c666960008301527f6c6c6564210000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d09602f8361567b565b91507f4241433030324d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420617373657400000000000000000000000000000000006020830152604082019050919050565b6000614d6f60298361567b565b91507f4241433030323a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420617373657400000000000000000000000000000000000000000000006020830152604082019050919050565b6000614dd5602c8361567b565b91507f4241433030323a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420617373657400000000000000000000000000000000000000006020830152604082019050919050565b6000614e3b60168361567b565b91507f53757370656e6461626c653a2073757370656e646564000000000000000000006000830152602082019050919050565b614e7781615700565b82525050565b614e8681615700565b82525050565b6000602082019050614ea160008301846141c7565b92915050565b6000602082019050614ebc60008301846141b8565b92915050565b6000608082019050614ed760008301876141b8565b614ee460208301866141c7565b614ef16040830185614e7d565b8181036060830152614f038184614252565b905095945050505050565b6000606082019050614f2360008301866141b8565b8181036020830152614f35818561428b565b9050614f446040830184614243565b949350505050565b6000604082019050614f6160008301856141c7565b614f6e6020830184614e7d565b9392505050565b60006020820190508181036000830152614f8f81846141d6565b905092915050565b6000602082019050614fac6000830184614234565b92915050565b6000602082019050614fc76000830184614243565b92915050565b600060c082019050614fe26000830189614243565b8181036020830152614ff4818861428b565b90508181036040830152615008818761428b565b90506150176060830186614e7d565b61502460808301856141c7565b81810360a0830152615036818461428b565b9050979650505050505050565b6000602082019050818103600083015261505d818461428b565b905092915050565b6000602082019050818103600083015261507e816142c4565b9050919050565b6000602082019050818103600083015261509e8161432a565b9050919050565b600060208201905081810360008301526150be8161436a565b9050919050565b600060208201905081810360008301526150de816143d0565b9050919050565b600060208201905081810360008301526150fe81614410565b9050919050565b6000602082019050818103600083015261511e81614476565b9050919050565b6000602082019050818103600083015261513e816144dc565b9050919050565b6000602082019050818103600083015261515e81614542565b9050919050565b6000602082019050818103600083015261517e816145a8565b9050919050565b6000602082019050818103600083015261519e8161460e565b9050919050565b600060208201905081810360008301526151be81614674565b9050919050565b600060208201905081810360008301526151de816146b4565b9050919050565b600060208201905081810360008301526151fe8161471a565b9050919050565b6000602082019050818103600083015261521e8161475a565b9050919050565b6000602082019050818103600083015261523e816147c0565b9050919050565b6000602082019050818103600083015261525e81614826565b9050919050565b6000602082019050818103600083015261527e8161488c565b9050919050565b6000602082019050818103600083015261529e816148f2565b9050919050565b600060208201905081810360008301526152be81614958565b9050919050565b600060208201905081810360008301526152de81614998565b9050919050565b600060208201905081810360008301526152fe816149d8565b9050919050565b6000602082019050818103600083015261531e81614a3e565b9050919050565b6000602082019050818103600083015261533e81614aa4565b9050919050565b6000602082019050818103600083015261535e81614ae4565b9050919050565b6000602082019050818103600083015261537e81614b24565b9050919050565b6000602082019050818103600083015261539e81614b8a565b9050919050565b600060208201905081810360008301526153be81614bca565b9050919050565b600060208201905081810360008301526153de81614c30","565b9050919050565b600060208201905081810360008301526153fe81614c96565b9050919050565b6000602082019050818103600083015261541e81614cfc565b9050919050565b6000602082019050818103600083015261543e81614d62565b9050919050565b6000602082019050818103600083015261545e81614dc8565b9050919050565b6000602082019050818103600083015261547e81614e2e565b9050919050565b600060208201905061549a6000830184614e7d565b92915050565b60006040820190506154b56000830185614e7d565b81810360208301526154c78184614252565b90509392505050565b600060c0820190506154e56000830189614e7d565b81810360208301526154f7818861428b565b9050818103604083015261550b818761428b565b905061551a6060830186614e7d565b61552760808301856141c7565b81810360a0830152615539818461428b565b9050979650505050505050565b6000604051905081810181811067ffffffffffffffff8211171561556957600080fd5b8060405250919050565b600067ffffffffffffffff82111561558a57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156155b257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156155da57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561560657600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615697826156e0565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006157158261571c565b9050919050565b60006157278261572e565b9050919050565b6000615739826156e0565b9050919050565b82818337600083830152505050565b60005b8381101561576d578082015181840152602081019050615752565b8381111561577c576000848401525b50505050565b6000601f19601f8301169050919050565b61579c8161568c565b81146157a757600080fd5b50565b6157b38161569e565b81146157be57600080fd5b50565b6157ca816156aa565b81146157d557600080fd5b50565b6157e1816156b4565b81146157ec57600080fd5b50565b6157f881615700565b811461580357600080fd5b5056fea2646970667358221220101392c6b9308c61b6d392f127ae8a1796585d9b918541fbafba0cc0105c1c8e64736f6c634300060a003368747470733a2f2f706963342e7a68696d672e636f6d2f38302f76322d37613466383064373734353139623163663462653462636664353634313432375f31343430772e6a706768747470733a2f2f706963312e7a68696d672e636f6d2f38302f76322d32356538626230333231623738646139353939306263646564623639326330635f31343430772e6a706768747470733a2f2f706963312e7a68696d672e636f6d2f38302f76322d66386430313233393761323638373264663435363239316165313737326235385f31343430772e6a706768747470733a2f2f706963322e7a68696d672e636f6d2f38302f76322d36383338643336363534383736393234643735653863633131353435333939645f31343430772e6a706768747470733a2f2f706963312e7a68696d672e636f6d2f38302f76322d63653361323666663666393663323232613965653933643831373933323864635f31343430772e6a706768747470733a2f2f706963312e7a68696d672e636f6d2f76322d38326336633965613331326562356565623933643766353363386533323539615f31343430772e6a706768747470733a2f2f706963312e7a68696d672e636f6d2f38302f76322d33336635396134333433616262366134396233353237383933373766663564385f31343430772e6a7067"};

    public static final String BINARY = String.join("", BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"randomOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IssuerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IssuerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"catName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"requestId\",\"type\":\"bytes32\"}],\"name\":\"ResultOfNewBlindboxCat\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assetId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Send\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"requestId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"series\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"birthTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"images\",\"type\":\"string\"}],\"name\":\"SurpriseCat\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Suspended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"SuspenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"SuspenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"UnSuspended\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addIssuer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addSuspender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"assetId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"assetByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"assetOfOwner\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"assetOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assetId\",\"type\":\"uint256\"}],\"name\":\"assetURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"to\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"assetId\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"batchSendFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assetId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"destroy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"requestId\",\"type\":\"bytes32\"}],\"name\":\"generateBlindBoxCat\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"generatedCats\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"catId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"species\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"birthTime\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"images\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assetId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"catId\",\"type\":\"uint256\"}],\"name\":\"getCatInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isIssuer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isSuspender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"assetId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"assetURI\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"issueWithAssetURI\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ass","etId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceIssuer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceSuspender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"userProvidedSeed\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"requestNewBlindboxCat\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"assetId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shortName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"suspend\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"suspended\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unSuspend\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"};

    public static final String ABI = String.join("", ABI_ARRAY);

    public static final TransactionDecoder transactionDecoder = new TransactionDecoder(ABI, BINARY);

    public static final String[] SM_BINARY_ARRAY = {"60806040526040518060e001604052806040518060400160405280601281526020017f416d65726963616e2053686f727468616972000000000000000000000000000081525081526020016040518060400160405280601181526020017f427269746973682053686f72746861697200000000000000000000000000000081525081526020016040518060400160405280601081526020017f4a6170616e65736520426f627461696c0000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4368696e657365204f72616e676500000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f5275737369616e20426c7565000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f5065727369616e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f526167646f6c6c00000000000000000000000000000000000000000000000000815250815250600f906007620001bc929190620008fd565b506040518060e001604052806040518060800160405280604781526020016200645f6047913981526020016040518060800160405280604781526020016200657860479139815260200160405180608001604052806047815260200162006531604791398152602001604051806080016040528060448152602001620064a660449139815260200160405180608001604052806047815260200162006606604791398152602001604051806080016040528060478152602001620064ea604791398152602001604051806080016040528060478152602001620065bf604791398152506016906007620002b1929190620008fd565b50348015620002bf57600080fd5b506040516200664d3803806200664d8339818101604052810190620002e5919062000a9a565b6040518060400160405280601181526020017f436174426c696e64426f785365726965730000000000000000000000000000008152506040518060400160405280600381526020017f43617400000000000000000000000000000000000000000000000000000000008152506200036233620006bd60201b60201c565b62000373336200071e60201b60201c565b6000600260006101000a81548160ff0219169083151502179055508160079080519060200190620003a692919062000957565b508060089080519060200190620003bf92919062000957565b50505033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d060405160405180910390a380602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008090505b6007811015620006b557601d6040518060400160405280600f8460078110620004ec57fe5b018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620005855780601f10620005595761010080835404028352916020019162000585565b820191906000526020600020905b8154815290600101906020018083116200056757829003601f168201915b50505050508152602001601684600781106200059d57fe5b018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620006365780601f106200060a5761010080835404028352916020019162000636565b820191906000526020600020905b8154815290600101906020018083116200061857829003601f168201915b5050505050815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000190805190602001906200068592919062000957565b506020820151816001019080519060200190620006a492919062000957565b5050508080600101915050620004c7565b505062000c13565b620006d88160006200077f60201b620025211790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167fd766f4a67950d691b1432c913f7a137a6566c6434f39026cc104656f3de99cdb60405160405180910390a250565b620007398160016200077f60201b620025211790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f2a1cd87400ca805f4be1bedfa3707963477f151dd1745207ca1461f796a44e0e60405160405180910390a250565b6200079182826200083260201b60201c565b15620007d4576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401620007cb9062000b92565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008a6576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016200089d9062000b70565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b826007810192821562000944579160200282015b82811115620009435782518290805190602001906200093292919062000957565b509160200191906001019062000911565b5b509050620009539190620009de565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200099a57805160ff1916838001178555620009cb565b82800160010185558215620009cb579182015b82811115620009ca578251825591602001919060010190620009ad565b5b509050620009da919062000a0f565b5090565b62000a0c91905b8082111562000a085760008181620009fe919062000a37565b50600101620009e5565b5090565b90565b62000a3491905b8082111562000a3057600081600090555060010162000a16565b5090565b90565b50805460018160011615610100020316600290046000825580601f1062000a5f575062000a80565b601f01602090049060005260206000209081019062000a7f919062000a0f565b5b50565b60008151905062000a948162000bf9565b92915050565b60006020828403121562000aad57600080fd5b600062000abd8482850162000a83565b91505092915050565b600062000ad560228362000bb4565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000b3d601f8362000bb4565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b6000602082019050818103600083015262000b8b8162000ac6565b9050919050565b6000602082019050818103600083015262000bad8162000b2e565b9050919050565b600082825260208201905092915050565b600062000bd28262000bd9565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b62000c048162000bc5565b811462000c1057600080fd5b50565b61583c8062000c236000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80636b14f0a41161011a57806399f3c7f6116100ad578063b24457bc1161007c578063b24457bc14610614578063b272f0721461061e578063c87d89a61461064e578063cee23c1f14610658578063ede8e5291461068d57610206565b806399f3c7f6146105685780639cb97a52146105845780639d4834e5146105b4578063ad587169146105e457610206565b806388769ff0116100e957806388769ff0146104d05780638ad7f5401461050057806390bb87931461051c57806392e33d361461054c57610206565b80636b14f0a414610457578063799013bc146104615780637df841191461047f57806380b30b3f146104b457610206565b8063455e8ed71161019d5780635089e2c81161016c5780635089e2c81461038d578063528483f5146103ab5780635711734b146103db578063586f0da11461040b5780635d4cba341461042757610206565b8063455e8ed71461031757806345731162146103355780634c00105f146103535780634db9df361461038357610206565b80631f2d4860116101d95780631f2d48601461029357806320a56971146102af5780632392c068146102df5780632ffdc5f8146102fb57610206565b80630256e2781461020b57806302afb286146102295780630a3be3ec1461025957806316cad12a14610277575b600080fd5b6102136106ab565b6040516102209190615485565b60405180910390f35b610243600480360381019061023e9190613d68565b6106b8565b6040516102509190614f97565b60405180910390f35b6102616106d5565b60405161026e9190615043565b60405180910390f35b610291600480360381019061028c9190613d68565b610777565b005b6102ad60048036038101906102a89190613f2f565b6107ca565b005b6102c960048036038101906102c49190613d68565b6109bc565b6040516102d69190614f97565b60405180910390f35b6102f960048036038101906102f49190613d68565b6109d9565b005b61031560048036038101906103109190613ef3565b610a2d565b005b61031f610be9565b60405161032c9190615043565b60405180910390f35b61033d610c8b565b60405161034a9190615485565b60405180910390f35b61036d60048036038101906103689190613d91565b610c98565b60405161037a9190614f97565b60405180910390f35b61038b610d2c565b005b610395610e17565b6040516103a29190614e8c565b60405180910390f35b6103c560048036038101906103c091906140a2565b610e41565b6040516103d29190615043565b60405180910390f35b61","03f560048036038101906103f091906140a2565b610f3e565b6040516104029190614e8c565b60405180910390f35b61042560048036038101906104209190613d68565b610ff0565b005b610441600480360381019061043c9190613f6b565b611044565b60405161044e9190614f97565b60405180910390f35b61045f6110af565b005b61046961119b565b6040516104769190614f97565b60405180910390f35b610499600480360381019061049491906140a2565b6111b2565b6040516104ab969594939291906154d0565b60405180910390f35b6104ce60048036038101906104c99190613dcd565b6113e3565b005b6104ea60048036038101906104e591906140a2565b6114d9565b6040516104f79190615485565b60405180910390f35b61051a600480360381019061051591906140f4565b611543565b005b6105366004803603810190610531919061414c565b6115df565b6040516105439190614fb2565b60405180910390f35b61056660048036038101906105619190613e48565b611798565b005b610582600480360381019061057d9190614027565b611902565b005b61059e600480360381019061059991906140a2565b611f71565b6040516105ab9190614e8c565b60405180910390f35b6105ce60048036038101906105c99190613d68565b611ff6565b6040516105db9190615485565b60405180910390f35b6105fe60048036038101906105f99190613d68565b6120b5565b60405161060b9190614f75565b60405180910390f35b61061c61214c565b005b61063860048036038101906106339190613f2f565b612157565b6040516106459190615485565b60405180910390f35b610656612200565b005b610672600480360381019061066d91906140a2565b61220b565b604051610684969594939291906154d0565b60405180910390f35b6106956124c9565b6040516106a29190614f97565b60405180910390f35b6000600c80549050905090565b60006106ce8260006125c990919063ffffffff16565b9050919050565b606060088054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561076d5780601f106107425761010080835404028352916020019161076d565b820191906000526020600020905b81548152906001019060200180831161075057829003601f168201915b5050505050905090565b61077f6124c9565b6107be576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016107b5906153e5565b60405180910390fd5b6107c781612691565b50565b600260009054906101000a900460ff161561081a576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161081190615125565b60405180910390fd5b600061082582610f3e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610896576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161088d90615085565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108d657506108d58133610c98565b5b610915576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161090c906152c5565b60405180910390fd5b826004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fd1e45707b3f71c77903b61f04c900f772db264b9bf618f1cc3308fb516eb616984846040516109af929190614f4c565b60405180910390a2505050565b60006109d28260016125c990919063ffffffff16565b9050919050565b6109e2336106b8565b610a21576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610a1890615425565b60405180910390fd5b610a2a816127c1565b50565b600260009054906101000a900460ff1615610a7d576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610a7490615125565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aec576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610ae390615165565b60405180910390fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f34cc9ec6b85c217ac6bd5f7b86411e4e4e40d816d5d17725c4dec1f0901d907483604051610bdd9190614f97565b60405180910390a35050565b606060078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c815780601f10610c5657610100808354040283529160200191610c81565b820191906000526020600020905b815481529060010190602001808311610c6457829003601f168201915b5050505050905090565b6000601d80549050905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d35336109bc565b610d74576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610d6b90615105565b60405180910390fd5b600260009054906101000a900460ff16610dc3576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610dba90615345565b60405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f49cf6bd0eac7c3496174468c250e85009598e5c78d9a83e07df711d9da5c185a33604051610e0d9190614ea7565b60405180910390a1565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060610e4c8261281b565b610e8b576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610e8290615225565b60405180910390fd5b600960008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f325780601f10610f0757610100808354040283529160200191610f32565b820191906000526020600020905b815481529060010190602001808311610f1557829003601f168201915b50505050509050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fe7576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610fde906152e5565b60405180910390fd5b80915050919050565b610ff9336109bc565b611038576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161102f90615105565b60405180910390fd5b6110418161288d565b50565b600061104f336106b8565b61108e576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161108590615425565b60405180910390fd5b6110998585846128e7565b6110a38484612ad0565b60019050949350505050565b6110b8336109bc565b6110f7576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016110ee90615105565b60405180910390fd5b600260009054906101000a900460ff1615611147576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161113e90615125565b60405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f8773c8f57dc13d3ee6a296fb66e009fe3abc25fce48e4bdeb7583b3064ad35e8336040516111919190614ea7565b60405180910390a1565b6000600260009054906101000a900460ff16905090565b601e81815481106111bf57fe5b9060005260206000209060060201600091509050806000015490806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112715780601f1061124657610100808354040283529160200191611271565b820191906000526020600020905b81548152906001019060200180831161125457829003601f168201915b505050505090806002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561130f5780601f106112e45761010080835404028352916020019161130f565b820191906000526020600020905b8154815290600101906020018083116112f257829003601f168201915b5050505050908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806005018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113d95780601f106113ae576101008083540402835291602001916113d9565b820191906000526020600020905b8154815290600101906020018083116113bc57829003601f168201915b505050","5050905086565b600260009054906101000a900460ff1615611433576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161142a90615125565b60405180910390fd5b61143d3383612b44565b61147c576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161147390615265565b60405180910390fd5b61148884848484612c22565b61149484848484612e89565b6114d3576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016114ca906150a5565b60405180910390fd5b50505050565b60006114e36106ab565b8210611524576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161151b90615205565b60405180910390fd5b600c828154811061153157fe5b90600052602060002001549050919050565b61154d3384612b44565b61158c576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161158390615465565b60405180910390fd5b6115da8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612fa0565b505050565b600080601d8054905011611628576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161161f90615065565b60405180910390fd5b6000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f724a279856040518263ffffffff1660e01b81526004016116859190615485565b602060405180830381600087803b15801561169f57600080fd5b505af11580156116b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d79190614050565b905082601f600083815260200190815260200160002090805190602001906117009291906138ee565b50336020600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd74ebf5bb3d2c9b5f2944ba1df32aa8f3fb8747006f15d647b7050159bd269fb33848360405161178693929190614f0e565b60405180910390a18091505092915050565b600260009054906101000a900460ff16156117e8576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016117df90615125565b60405180910390fd5b815183511461182c576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161182390615145565b60405180910390fd5b60008090505b83518110156118fb57600073ffffffffffffffffffffffffffffffffffffffff1684828151811061185f57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156118be576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016118b590615185565b60405180910390fd5b6118f0858583815181106118ce57fe5b60200260200101518584815181106118e257fe5b6020026020010151856113e3565b806001019050611832565b5050505050565b6000601d805490501161194a576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161194190615065565b60405180910390fd5b60001515602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356ddd8ed836040518263ffffffff1660e01b81526004016119a99190614fb2565b60206040518083038186803b1580156119c157600080fd5b505afa1580156119d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f99190613ffe565b151514611a3b576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611a3290615305565b60405180910390fd5b6000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b791ee54836040518263ffffffff1660e01b8152600401611a989190614fb2565b60206040518083038186803b158015611ab057600080fd5b505afa158015611ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae891906140cb565b90506000601d805490508281611afa57fe5b0690506060601f60008581526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ba65780601f10611b7b57610100808354040283529160200191611ba6565b820191906000526020600020905b815481529060010190602001808311611b8957829003601f168201915b50505050509050611bb561396e565b601d8360ff1681548110611bc557fe5b9060005260206000209060020201604051806040016040529081600082018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c775780601f10611c4c57610100808354040283529160200191611c77565b820191906000526020600020905b815481529060010190602001808311611c5a57829003601f168201915b50505050508152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d195780601f10611cee57610100808354040283529160200191611d19565b820191906000526020600020905b815481529060010190602001808311611cfc57829003601f168201915b5050505050815250509050611d2d83612fb7565b60004290506000601e805490509050601e6040518060c0016040528083815260200186815260200185600001518152602001848152602001602060008b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185602001518152509080600181540180825580915050600190039060005260206000209060060201600090919091909150600082015181600001556020820151816001019080519060200190611e0b9291906138ee565b506040820151816002019080519060200190611e289291906138ee565b506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005019080519060200190611e969291906138ee565b505050611eeb6020600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682856020015160405180602001604052806000815250611044565b507feb4315a7a3c9ad1c229ba2dfd91fc8d73d2518abfe55c1d1e071c46cfbead5548785856000015185602060008d815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168860200151604051611f6096959493929190614fcd565b60405180910390a150505050505050565b6000611f7c8261281b565b611fbb576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611fb2906151e5565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612067576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161205e906151c5565b60405180910390fd5b6120ae600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613092565b9050919050565b6060600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561214057602002820191906000526020600020905b81548152602001906001019080831161212c575b50505050509050919050565b612155336130a0565b565b600061216283611ff6565b82106121a3576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161219a90615285565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106121ed57fe5b9060005260206000200154905092915050565b612209336130fa565b565b6000606080600080606061221d613988565b601e888154811061222a57fe5b90600052602060002090600602016040518060c001604052908160008201548152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122e65780601f106122bb576101008083540402835291602001916122e6565b820191906000526020600020905b8154815290600101906020018083116122c957829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123885780601f1061235d57610100808354040283529160200191612388565b820191906000526020600020905b81548152906001019060200180831161236b57829003601f168201915b50505050508152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffff","ffffffffffffffffffffffffffffffff168152602001600582018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561248a5780601f1061245f5761010080835404028352916020019161248a565b820191906000526020600020905b81548152906001019060200180831161246d57829003601f168201915b5050505050815250509050806000015181602001518260400151836060015184608001518560a001519650965096509650965096505091939550919395565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b61252b82826125c9565b1561256b576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612562906153a5565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561263a576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612631906150e5565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612701576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016126f8906151a5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d060405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6127d581600061252190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fd766f4a67950d691b1432c913f7a137a6566c6434f39026cc104656f3de99cdb60405160405180910390a250565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6128a181600161252190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f2a1cd87400ca805f4be1bedfa3707963477f151dd1745207ca1461f796a44e0e60405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612957576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161294e90615445565b60405180910390fd5b6129608261281b565b156129a0576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161299790615365565b60405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612a39600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613154565b8273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f03adcfa31acbe66b869f42da88a1595526b1bff922f953259ed8dc7057377d648585604051612ab09291906154a0565b60405180910390a4612ac2838361316a565b612acb8261322e565b505050565b612ad98261281b565b612b18576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612b0f90615325565b60405180910390fd5b80600960008481526020019081526020016000209080519060200190612b3f9291906138ee565b505050565b6000612b4f8261281b565b612b8e576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612b8590615385565b60405180910390fd5b6000612b9983610f3e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c0857508373ffffffffffffffffffffffffffffffffffffffff16612bf084611f71565b73ffffffffffffffffffffffffffffffffffffffff16145b80612c195750612c188185610c98565b5b91505092915050565b8373ffffffffffffffffffffffffffffffffffffffff16612c4283610f3e565b73ffffffffffffffffffffffffffffffffffffffff1614612c98576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612c8f90615405565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d08576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612cff906152a5565b60405180910390fd5b612d1182613277565b612d58600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613335565b612d9f600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613154565b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f03adcfa31acbe66b869f42da88a1595526b1bff922f953259ed8dc7057377d648585604051612e679291906154a0565b60405180910390a4612e798483613358565b612e83838361316a565b50505050565b6000612eaa8473ffffffffffffffffffffffffffffffffffffffff16613501565b612eb75760019050612f98565b60008473ffffffffffffffffffffffffffffffffffffffff16634cab2860338887876040518563ffffffff1660e01b8152600401612ef89493929190614ec2565b602060405180830381600087803b158015612f1257600080fd5b505af1158015612f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4a9190614079565b90506331f6f50e60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b612fb3612fac83610f3e565b8383613514565b5050565b601d6001601d805490500381548110612fcc57fe5b9060005260206000209060020201601d8260ff1681548110612fea57fe5b90600052602060002090600202016000820181600001908054600181600116156101000203166002900461301f9291906139d4565b50600182018160010190805460018160011615610100020316600290046130479291906139d4565b50905050601d80548061305657fe5b60019003818190600052602060002090600202016000808201600061307b9190613a5b565b60018201600061308b9190613a5b565b5050905550565b600081600001549050919050565b6130b481600061372c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f36b34ae98169cd7ef0173d334314715146307b58e670074b7fcb08536203e19760405160405180910390a250565b61310e81600161372c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fd41c85c03019e031a8a3b9787724349558f4a037ea632350e247795aaa5e8ec560405160405180910390a250565b6001816000016000828254019250508190555050565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600b600083815260200190815260200160002081905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150555050565b600c80549050600d600083815260200190815260200160002081905550600c81908060018154018082558091505060019003906000526020600020016000909190919091505550565b600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133325760006004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61334d600182600001546137d390919063ffffffff16565b816000018190555050565b60006133b06001600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506137d390919063ffffffff16565b90506000600b600084815260200190815260200160002054905081811461349d576000600a60008673ffffff","ffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061341d57fe5b9060005260206000200154905080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061347557fe5b906000526020600020018190555081600b600083815260200190815260200160002081905550505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806134e557fe5b6001900381819060005260206000200160009055905550505050565b600080823b905060008111915050919050565b8273ffffffffffffffffffffffffffffffffffffffff1661353483610f3e565b73ffffffffffffffffffffffffffffffffffffffff161461358a576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401613581906150c5565b60405180910390fd5b61359382613277565b6135da600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613335565b60006003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008481526020019081526020016000208054600181600116156101000203166002900490501461367c5760096000838152602001908152602001600020600061367b9190613a5b565b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f03adcfa31acbe66b869f42da88a1595526b1bff922f953259ed8dc7057377d6485856040516136f39291906154a0565b60405180910390a46137058383613358565b6000600b60008481526020019081526020016000208190555061372782613829565b505050565b61373682826125c9565b613775576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161376c90615245565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600082821115613818576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161380f906153c5565b60405180910390fd5b600082840390508091505092915050565b60006138446001600c805490506137d390919063ffffffff16565b90506000600d60008481526020019081526020016000205490506000600c838154811061386d57fe5b9060005260206000200154905080600c838154811061388857fe5b906000526020600020018190555081600d600083815260200190815260200160002081905550600c8054806138b957fe5b600190038181906000526020600020016000905590556000600d60008681526020019081526020016000208190555050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061392f57805160ff191683800117855561395d565b8280016001018555821561395d579182015b8281111561395c578251825591602001919060010190613941565b5b50905061396a9190613aa3565b5090565b604051806040016040528060608152602001606081525090565b6040518060c0016040528060008152602001606081526020016060815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a0d5780548555613a4a565b82800160010185558215613a4a57600052602060002091601f016020900482015b82811115613a49578254825591600101919060010190613a2e565b5b509050613a579190613aa3565b5090565b50805460018160011615610100020316600290046000825580601f10613a815750613aa0565b601f016020900490600052602060002090810190613a9f9190613aa3565b5b50565b613ac591905b80821115613ac1576000816000905550600101613aa9565b5090565b90565b600081359050613ad781615793565b92915050565b600082601f830112613aee57600080fd5b8135613b01613afc82615573565b615546565b91508181835260208401935060208101905083856020840282011115613b2657600080fd5b60005b83811015613b565781613b3c8882613ac8565b845260208401935060208301925050600181019050613b29565b5050505092915050565b600082601f830112613b7157600080fd5b8135613b84613b7f8261559b565b615546565b91508181835260208401935060208101905083856020840282011115613ba957600080fd5b60005b83811015613bd95781613bbf8882613d3e565b845260208401935060208301925050600181019050613bac565b5050505092915050565b600081359050613bf2816157aa565b92915050565b600081519050613c07816157aa565b92915050565b600081359050613c1c816157c1565b92915050565b600081519050613c31816157c1565b92915050565b600081519050613c46816157d8565b92915050565b60008083601f840112613c5e57600080fd5b8235905067ffffffffffffffff811115613c7757600080fd5b602083019150836001820283011115613c8f57600080fd5b9250929050565b600082601f830112613ca757600080fd5b8135613cba613cb5826155c3565b615546565b91508082526020830160208301858383011115613cd657600080fd5b613ce1838284615740565b50505092915050565b600082601f830112613cfb57600080fd5b8135613d0e613d09826155ef565b615546565b91508082526020830160208301858383011115613d2a57600080fd5b613d35838284615740565b50505092915050565b600081359050613d4d816157ef565b92915050565b600081519050613d62816157ef565b92915050565b600060208284031215613d7a57600080fd5b6000613d8884828501613ac8565b91505092915050565b60008060408385031215613da457600080fd5b6000613db285828601613ac8565b9250506020613dc385828601613ac8565b9150509250929050565b60008060008060808587031215613de357600080fd5b6000613df187828801613ac8565b9450506020613e0287828801613ac8565b9350506040613e1387828801613d3e565b925050606085013567ffffffffffffffff811115613e3057600080fd5b613e3c87828801613c96565b91505092959194509250565b60008060008060808587031215613e5e57600080fd5b6000613e6c87828801613ac8565b945050602085013567ffffffffffffffff811115613e8957600080fd5b613e9587828801613add565b935050604085013567ffffffffffffffff811115613eb257600080fd5b613ebe87828801613b60565b925050606085013567ffffffffffffffff811115613edb57600080fd5b613ee787828801613c96565b91505092959194509250565b60008060408385031215613f0657600080fd5b6000613f1485828601613ac8565b9250506020613f2585828601613be3565b9150509250929050565b60008060408385031215613f4257600080fd5b6000613f5085828601613ac8565b9250506020613f6185828601613d3e565b9150509250929050565b60008060008060808587031215613f8157600080fd5b6000613f8f87828801613ac8565b9450506020613fa087828801613d3e565b935050604085013567ffffffffffffffff811115613fbd57600080fd5b613fc987828801613cea565b925050606085013567ffffffffffffffff811115613fe657600080fd5b613ff287828801613c96565b91505092959194509250565b60006020828403121561401057600080fd5b600061401e84828501613bf8565b91505092915050565b60006020828403121561403957600080fd5b600061404784828501613c0d565b91505092915050565b60006020828403121561406257600080fd5b600061407084828501613c22565b91505092915050565b60006020828403121561408b57600080fd5b600061409984828501613c37565b91505092915050565b6000602082840312156140b457600080fd5b60006140c284828501613d3e565b91505092915050565b6000602082840312156140dd57600080fd5b60006140eb84828501613d53565b91505092915050565b60008060006040848603121561410957600080fd5b600061411786828701613d3e565b935050602084013567ffffffffffffffff81111561413457600080fd5b61414086828701613c4c565b92509250509250925092565b6000806040838503121561415f57600080fd5b600061416d85828601613d3e565b925050602083013567ffffffffffffffff81111561418a57600080fd5b61419685828601613cea565b9150509250929050565b60006141ac8383614e6e565b60208301905092915050565b6141c18161570a565b82525050565b6141d08161568c565b82525050565b60006141e18261562b565b6141eb8185615659565b93506141f68361561b565b8060005b8381101561422757815161420e88826141a0565b97506142198361564c565b9250506001810190506141fa565b5085935050505092915050565b61423d8161569e565b82525050565b61424c816156aa565b82525050565b600061425d82615636565b614267818561566a565b935061427781856020860161574f565b61428081615782565b840191505092915050565b600061429682615641565b6142a0818561567b565b93506142b081856020860161574f565b6142b981615782565b840191505092915050565b60006142d1601c8361567b565b91507f546865726520617265206e6f20626c696e6420626f78206361747321000000006000830152602082019050919050565b600061431160218361567b565b91507f4241433030323a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614377602e8361567b565b91507f4241433030323a2073656e6420746f206e6f6e2042414330303252656365697660008301527f657220696d706c656d656e7465720000000000000000000000000000000000006020830152604082019050919050565b60006143dd60288361567b56","5b91507f4241433030323a2064657374726f79206f66206173736574207468617420697360008301527f206e6f74206f776e0000000000000000000000000000000000000000000000006020830152604082019050919050565b600061444360228361567b565b91507f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006144a960368361567b565b91507f53757370656e646572526f6c653a2063616c6c657220646f6573206e6f74206860008301527f617665207468652053757370656e64657220726f6c65000000000000000000006020830152604082019050919050565b600061450f60168361567b565b91507f53757370656e6461626c653a2073757370656e646564000000000000000000006000830152602082019050919050565b600061454f60278361567b565b91507f746f20616e642061737365744964206172726179206c656e676874206d75737460008301527f206d617463682e000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145b560198361567b565b91507f4241433030323a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006145f560258361567b565b91507f64657374696e6174696f6e2061646472657373206d757374206265206e6f6e2d60008301527f7a65726f2e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061465b60268361567b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146c1602a8361567b565b91507f4241433030323a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000614727602c8361567b565b91507f4241433030323a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420617373657400000000000000000000000000000000000000006020830152604082019050919050565b600061478d602c8361567b565b91507f424143303032456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006147f3602f8361567b565b91507f4241433030324d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420617373657400000000000000000000000000000000006020830152604082019050919050565b600061485960218361567b565b91507f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008301527f65000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006148bf602d8361567b565b91507f4241433030323a2073656e642063616c6c6572206973206e6f74206f776e657260008301527f206e6f7220617070726f766564000000000000000000000000000000000000006020830152604082019050919050565b6000614925602b8361567b565b91507f424143303032456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061498b60208361567b565b91507f4241433030323a2073656e6420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006149cb60388361567b565b91507f4241433030323a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000614a3160298361567b565b91507f4241433030323a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420617373657400000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a9760258361567b565b91507f206f7261636c6520717565727920686173206e6f74206265656e2066756c666960008301527f6c6c6564210000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614afd602c8361567b565b91507f4241433030324d657461646174613a2055524920736574206f66206e6f6e657860008301527f697374656e7420617373657400000000000000000000000000000000000000006020830152604082019050919050565b6000614b63601a8361567b565b91507f53757370656e6461626c653a206e6f742073757370656e6465640000000000006000830152602082019050919050565b6000614ba3601c8361567b565b91507f4241433030323a20617373657420616c7265616479206d696e746564000000006000830152602082019050919050565b6000614be3602c8361567b565b91507f4241433030323a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420617373657400000000000000000000000000000000000000006020830152604082019050919050565b6000614c49601f8361567b565b91507f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006000830152602082019050919050565b6000614c89601e8361567b565b91507f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006000830152602082019050919050565b6000614cc960208361567b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614d0960258361567b565b91507f4241433030323a2073656e64206f662061737365742074686174206973206e6f60008301527f74206f776e0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d6f60308361567b565b91507f497373756572526f6c653a2063616c6c657220646f6573206e6f74206861766560008301527f207468652049737375657220726f6c65000000000000000000000000000000006020830152604082019050919050565b6000614dd560208361567b565b91507f4241433030323a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000614e1560308361567b565b91507f4241433030324275726e61626c653a2063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f766564000000000000000000000000000000006020830152604082019050919050565b614e7781615700565b82525050565b614e8681615700565b82525050565b6000602082019050614ea160008301846141c7565b92915050565b6000602082019050614ebc60008301846141b8565b92915050565b6000608082019050614ed760008301876141b8565b614ee460208301866141c7565b614ef16040830185614e7d565b8181036060830152614f038184614252565b905095945050505050565b6000606082019050614f2360008301866141b8565b8181036020830152614f35818561428b565b9050614f446040830184614243565b949350505050565b6000604082019050614f6160008301856141c7565b614f6e6020830184614e7d565b9392505050565b60006020820190508181036000830152614f8f81846141d6565b905092915050565b6000602082019050614fac6000830184614234565b92915050565b6000602082019050614fc76000830184614243565b92915050565b600060c082019050614fe26000830189614243565b8181036020830152614ff4818861428b565b90508181036040830152615008818761428b565b90506150176060830186614e7d565b61502460808301856141c7565b81810360a0830152615036818461428b565b9050979650505050505050565b6000602082019050818103600083015261505d818461428b565b905092915050565b6000602082019050818103600083015261507e816142c4565b9050919050565b6000602082019050818103600083015261509e81614304565b9050919050565b600060208201905081810360008301526150be8161436a565b9050919050565b600060208201905081810360008301526150de816143d0565b9050919050565b600060208201905081810360008301526150fe81614436565b9050919050565b6000602082019050818103600083015261511e8161449c565b9050919050565b6000602082019050818103600083015261513e81614502565b9050919050565b6000602082019050818103600083015261515e81614542565b9050919050565b6000602082019050818103600083015261517e816145a8565b9050919050565b6000602082019050818103600083015261519e816145e8565b9050919050565b600060208201905081810360008301526151be8161464e565b9050919050565b600060208201905081810360008301526151de816146b4565b9050919050565b600060208201905081810360008301526151fe8161471a565b9050919050565b6000602082019050818103600083015261521e81614780565b9050919050565b6000602082019050818103600083015261523e816147e6565b9050919050565b6000602082019050818103600083015261525e8161484c565b9050919050565b6000602082019050818103600083015261527e816148b2565b9050919050565b6000602082019050818103600083015261529e81614918565b9050919050565b600060208201905081810360008301526152be8161497e565b9050919050565b600060208201905081810360008301526152de816149be565b9050919050565b600060208201905081810360008301526152fe81614a24565b9050919050565b6000602082019050818103600083015261531e81614a8a565b9050919050565b6000602082019050818103600083015261533e81614af0565b9050919050565b6000602082019050818103600083015261535e81614b56565b9050919050565b6000602082019050818103600083015261537e81614b96565b9050919050565b6000602082019050818103600083015261539e81614bd6565b9050919050565b600060208201905081810360008301526153be81614c3c565b9050919050565b600060208201905081810360008301526153de81614c7c","565b9050919050565b600060208201905081810360008301526153fe81614cbc565b9050919050565b6000602082019050818103600083015261541e81614cfc565b9050919050565b6000602082019050818103600083015261543e81614d62565b9050919050565b6000602082019050818103600083015261545e81614dc8565b9050919050565b6000602082019050818103600083015261547e81614e08565b9050919050565b600060208201905061549a6000830184614e7d565b92915050565b60006040820190506154b56000830185614e7d565b81810360208301526154c78184614252565b90509392505050565b600060c0820190506154e56000830189614e7d565b81810360208301526154f7818861428b565b9050818103604083015261550b818761428b565b905061551a6060830186614e7d565b61552760808301856141c7565b81810360a0830152615539818461428b565b9050979650505050505050565b6000604051905081810181811067ffffffffffffffff8211171561556957600080fd5b8060405250919050565b600067ffffffffffffffff82111561558a57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156155b257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156155da57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561560657600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615697826156e0565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006157158261571c565b9050919050565b60006157278261572e565b9050919050565b6000615739826156e0565b9050919050565b82818337600083830152505050565b60005b8381101561576d578082015181840152602081019050615752565b8381111561577c576000848401525b50505050565b6000601f19601f8301169050919050565b61579c8161568c565b81146157a757600080fd5b50565b6157b38161569e565b81146157be57600080fd5b50565b6157ca816156aa565b81146157d557600080fd5b50565b6157e1816156b4565b81146157ec57600080fd5b50565b6157f881615700565b811461580357600080fd5b5056fea2646970667358221220b05a3b4b0ff11b7517300cac767870cac7e143f0d10cef0d076268019e2a6fe864736f6c634300060a003368747470733a2f2f706963312e7a68696d672e636f6d2f38302f76322d33336635396134333433616262366134396233353237383933373766663564385f31343430772e6a706768747470733a2f2f706963312e7a68696d672e636f6d2f76322d38326336633965613331326562356565623933643766353363386533323539615f31343430772e6a706768747470733a2f2f706963342e7a68696d672e636f6d2f38302f76322d37613466383064373734353139623163663462653462636664353634313432375f31343430772e6a706768747470733a2f2f706963312e7a68696d672e636f6d2f38302f76322d32356538626230333231623738646139353939306263646564623639326330635f31343430772e6a706768747470733a2f2f706963322e7a68696d672e636f6d2f38302f76322d36383338643336363534383736393234643735653863633131353435333939645f31343430772e6a706768747470733a2f2f706963312e7a68696d672e636f6d2f38302f76322d66386430313233393761323638373264663435363239316165313737326235385f31343430772e6a706768747470733a2f2f706963312e7a68696d672e636f6d2f38302f76322d63653361323666663666393663323232613965653933643831373933323864635f31343430772e6a7067"};

    public static final String SM_BINARY = String.join("", SM_BINARY_ARRAY);

    public static final String FUNC_ADDISSUER = "addIssuer";

    public static final String FUNC_ADDSUSPENDER = "addSuspender";

    public static final String FUNC_APPROVE = "approve";

    public static final String FUNC_ASSETBYINDEX = "assetByIndex";

    public static final String FUNC_ASSETOFOWNER = "assetOfOwner";

    public static final String FUNC_ASSETOFOWNERBYINDEX = "assetOfOwnerByIndex";

    public static final String FUNC_ASSETURI = "assetURI";

    public static final String FUNC_BALANCE = "balance";

    public static final String FUNC_BATCHSENDFROM = "batchSendFrom";

    public static final String FUNC_DESCRIPTION = "description";

    public static final String FUNC_DESTROY = "destroy";

    public static final String FUNC_GENERATEBLINDBOXCAT = "generateBlindBoxCat";

    public static final String FUNC_GENERATEDCATS = "generatedCats";

    public static final String FUNC_GETAPPROVED = "getApproved";

    public static final String FUNC_GETCATINFO = "getCatInfo";

    public static final String FUNC_GETLENGTH = "getLength";

    public static final String FUNC_ISAPPROVEDFORALL = "isApprovedForAll";

    public static final String FUNC_ISISSUER = "isIssuer";

    public static final String FUNC_ISOWNER = "isOwner";

    public static final String FUNC_ISSUSPENDER = "isSuspender";

    public static final String FUNC_ISSUEWITHASSETURI = "issueWithAssetURI";

    public static final String FUNC_OWNER = "owner";

    public static final String FUNC_OWNEROF = "ownerOf";

    public static final String FUNC_RENOUNCEISSUER = "renounceIssuer";

    public static final String FUNC_RENOUNCESUSPENDER = "renounceSuspender";

    public static final String FUNC_REQUESTNEWBLINDBOXCAT = "requestNewBlindboxCat";

    public static final String FUNC_SENDFROM = "sendFrom";

    public static final String FUNC_SETAPPROVALFORALL = "setApprovalForAll";

    public static final String FUNC_SHORTNAME = "shortName";

    public static final String FUNC_SUSPEND = "suspend";

    public static final String FUNC_SUSPENDED = "suspended";

    public static final String FUNC_TOTALSUPPLY = "totalSupply";

    public static final String FUNC_TRANSFEROWNERSHIP = "transferOwnership";

    public static final String FUNC_UNSUSPEND = "unSuspend";

    public static final Event APPROVAL_EVENT = new Event("Approval", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
    ;

    public static final Event APPROVALFORALL_EVENT = new Event("ApprovalForAll", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Bool>() {}));
    ;

    public static final Event ISSUERADDED_EVENT = new Event("IssuerAdded", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}));
    ;

    public static final Event ISSUERREMOVED_EVENT = new Event("IssuerRemoved", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}));
    ;

    public static final Event OWNERSHIPTRANSFERRED_EVENT = new Event("OwnershipTransferred", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}));
    ;

    public static final Event RESULTOFNEWBLINDBOXCAT_EVENT = new Event("ResultOfNewBlindboxCat", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}));
    ;

    public static final Event SEND_EVENT = new Event("Send", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}, new TypeReference<Uint256>() {}, new TypeReference<DynamicBytes>() {}));
    ;

    public static final Event SURPRISECAT_EVENT = new Event("SurpriseCat", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
    ;

    public static final Event SUSPENDED_EVENT = new Event("Suspended", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    public static final Event SUSPENDERADDED_EVENT = new Event("SuspenderAdded", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}));
    ;

    public static final Event SUSPENDERREMOVED_EVENT = new Event("SuspenderRemoved", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}));
    ;

    public static final Event UNSUSPENDED_EVENT = new Event("UnSuspended", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
    ;

    @Deprecated
    protected CatBlindbox(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        super(getBinary(), contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    protected CatBlindbox(String contractAddress, Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        super(getBinary(), contractAddress, web3j, credentials, contractGasProvider);
    }

    @Deprecated
    protected CatBlindbox(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(getBinary(), contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    protected CatBlindbox(String contractAddress, Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        super(getBinary(), contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public static String getBinary() {
        return (EncryptType.encryptType == EncryptType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public static TransactionDecoder getTransactionDecoder() {
        return transactionDecoder;
    }

    public List<ApprovalEventResponse> getApprovalEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(APPROVAL_EVENT, transactionReceipt);
        ArrayList<ApprovalEventResponse> responses = new ArrayList<ApprovalEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ApprovalEventResponse typedResponse = new ApprovalEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.approved = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.assetId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerApprovalEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(APPROVAL_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerApprovalEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(APPROVAL_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<ApprovalForAllEventResponse> getApprovalForAllEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(APPROVALFORALL_EVENT, transactionReceipt);
        ArrayList<ApprovalForAllEventResponse> responses = new ArrayList<ApprovalForAllEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ApprovalForAllEventResponse typedResponse = new ApprovalForAllEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.operator = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.approved = (Boolean) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerApprovalForAllEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(APPROVALFORALL_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerApprovalForAllEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(APPROVALFORALL_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<IssuerAddedEventResponse> getIssuerAddedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(ISSUERADDED_EVENT, transactionReceipt);
        ArrayList<IssuerAddedEventResponse> responses = new ArrayList<IssuerAddedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            IssuerAddedEventResponse typedResponse = new IssuerAddedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerIssuerAddedEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(ISSUERADDED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerIssuerAddedEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(ISSUERADDED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<IssuerRemovedEventResponse> getIssuerRemovedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(ISSUERREMOVED_EVENT, transactionReceipt);
        ArrayList<IssuerRemovedEventResponse> responses = new ArrayList<IssuerRemovedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            IssuerRemovedEventResponse typedResponse = new IssuerRemovedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerIssuerRemovedEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(ISSUERREMOVED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerIssuerRemovedEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(ISSUERREMOVED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<OwnershipTransferredEventResponse> getOwnershipTransferredEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(OWNERSHIPTRANSFERRED_EVENT, transactionReceipt);
        ArrayList<OwnershipTransferredEventResponse> responses = new ArrayList<OwnershipTransferredEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            OwnershipTransferredEventResponse typedResponse = new OwnershipTransferredEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.previousOwner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.newOwner = (String) eventValues.getIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerOwnershipTransferredEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(OWNERSHIPTRANSFERRED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerOwnershipTransferredEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(OWNERSHIPTRANSFERRED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<ResultOfNewBlindboxCatEventResponse> getResultOfNewBlindboxCatEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(RESULTOFNEWBLINDBOXCAT_EVENT, transactionReceipt);
        ArrayList<ResultOfNewBlindboxCatEventResponse> responses = new ArrayList<ResultOfNewBlindboxCatEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            ResultOfNewBlindboxCatEventResponse typedResponse = new ResultOfNewBlindboxCatEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.sender = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.catName = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.requestId = (byte[]) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerResultOfNewBlindboxCatEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(RESULTOFNEWBLINDBOXCAT_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerResultOfNewBlindboxCatEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(RESULTOFNEWBLINDBOXCAT_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<SendEventResponse> getSendEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(SEND_EVENT, transactionReceipt);
        ArrayList<SendEventResponse> responses = new ArrayList<SendEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            SendEventResponse typedResponse = new SendEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.operator = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.from = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.to = (String) eventValues.getIndexedValues().get(2).getValue();
            typedResponse.assetId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.data = (byte[]) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerSendEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(SEND_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerSendEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(SEND_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<SurpriseCatEventResponse> getSurpriseCatEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(SURPRISECAT_EVENT, transactionReceipt);
        ArrayList<SurpriseCatEventResponse> responses = new ArrayList<SurpriseCatEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            SurpriseCatEventResponse typedResponse = new SurpriseCatEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.requestId = (byte[]) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.name = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.series = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.birthTime = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.owner = (String) eventValues.getNonIndexedValues().get(4).getValue();
            typedResponse.images = (String) eventValues.getNonIndexedValues().get(5).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerSurpriseCatEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(SURPRISECAT_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerSurpriseCatEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(SURPRISECAT_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<SuspendedEventResponse> getSuspendedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(SUSPENDED_EVENT, transactionReceipt);
        ArrayList<SuspendedEventResponse> responses = new ArrayList<SuspendedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            SuspendedEventResponse typedResponse = new SuspendedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerSuspendedEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(SUSPENDED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerSuspendedEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(SUSPENDED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<SuspenderAddedEventResponse> getSuspenderAddedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(SUSPENDERADDED_EVENT, transactionReceipt);
        ArrayList<SuspenderAddedEventResponse> responses = new ArrayList<SuspenderAddedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            SuspenderAddedEventResponse typedResponse = new SuspenderAddedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerSuspenderAddedEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(SUSPENDERADDED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerSuspenderAddedEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(SUSPENDERADDED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<SuspenderRemovedEventResponse> getSuspenderRemovedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(SUSPENDERREMOVED_EVENT, transactionReceipt);
        ArrayList<SuspenderRemovedEventResponse> responses = new ArrayList<SuspenderRemovedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            SuspenderRemovedEventResponse typedResponse = new SuspenderRemovedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerSuspenderRemovedEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(SUSPENDERREMOVED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerSuspenderRemovedEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(SUSPENDERREMOVED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public List<UnSuspendedEventResponse> getUnSuspendedEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(UNSUSPENDED_EVENT, transactionReceipt);
        ArrayList<UnSuspendedEventResponse> responses = new ArrayList<UnSuspendedEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            UnSuspendedEventResponse typedResponse = new UnSuspendedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void registerUnSuspendedEventLogFilter(String fromBlock, String toBlock, List<String> otherTopics, EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(UNSUSPENDED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void registerUnSuspendedEventLogFilter(EventLogPushWithDecodeCallback callback) {
        String topic0 = EventEncoder.encode(UNSUSPENDED_EVENT);
        registerEventLogPushFilter(ABI,BINARY,topic0,callback);
    }

    public RemoteCall<TransactionReceipt> addIssuer(String account) {
        final Function function = new Function(
                FUNC_ADDISSUER, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void addIssuer(String account, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_ADDISSUER, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String addIssuerSeq(String account) {
        final Function function = new Function(
                FUNC_ADDISSUER, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple1<String> getAddIssuerInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDISSUER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public RemoteCall<TransactionReceipt> addSuspender(String account) {
        final Function function = new Function(
                FUNC_ADDSUSPENDER, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void addSuspender(String account, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_ADDSUSPENDER, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String addSuspenderSeq(String account) {
        final Function function = new Function(
                FUNC_ADDSUSPENDER, 
                Arrays.<Type>asList(new Address(account)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple1<String> getAddSuspenderInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDSUSPENDER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public RemoteCall<TransactionReceipt> approve(String to, BigInteger assetId) {
        final Function function = new Function(
                FUNC_APPROVE, 
                Arrays.<Type>asList(new Address(to),
                new Uint256(assetId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void approve(String to, BigInteger assetId, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_APPROVE, 
                Arrays.<Type>asList(new Address(to),
                new Uint256(assetId)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String approveSeq(String to, BigInteger assetId) {
        final Function function = new Function(
                FUNC_APPROVE, 
                Arrays.<Type>asList(new Address(to),
                new Uint256(assetId)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple2<String, BigInteger> getApproveInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_APPROVE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple2<String, BigInteger>(

                (String) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue()
                );
    }

    public RemoteCall<BigInteger> assetByIndex(BigInteger index) {
        final Function function = new Function(FUNC_ASSETBYINDEX, 
                Arrays.<Type>asList(new Uint256(index)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<List> assetOfOwner(String owner) {
        final Function function = new Function(FUNC_ASSETOFOWNER, 
                Arrays.<Type>asList(new Address(owner)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}));
        return new RemoteCall<List>(
                new Callable<List>() {
                    @Override
                    @SuppressWarnings("unchecked")
                    public List call() throws Exception {
                        List<Type> result = (List<Type>) executeCallSingleValueReturn(function, List.class);
                        return convertToNative(result);
                    }
                });
    }

    public RemoteCall<BigInteger> assetOfOwnerByIndex(String owner, BigInteger index) {
        final Function function = new Function(FUNC_ASSETOFOWNERBYINDEX, 
                Arrays.<Type>asList(new Address(owner),
                new Uint256(index)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<String> assetURI(BigInteger assetId) {
        final Function function = new Function(FUNC_ASSETURI, 
                Arrays.<Type>asList(new Uint256(assetId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<BigInteger> balance(String owner) {
        final Function function = new Function(FUNC_BALANCE, 
                Arrays.<Type>asList(new Address(owner)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<TransactionReceipt> batchSendFrom(String from, List<String> to, List<BigInteger> assetId, byte[] data) {
        final Function function = new Function(
                FUNC_BATCHSENDFROM, 
                Arrays.<Type>asList(new Address(from),
                to.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(to, Address.class)),
                assetId.isEmpty()? DynamicArray.empty("uint256[]"):new DynamicArray<Uint256>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(assetId, Uint256.class)),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void batchSendFrom(String from, List<String> to, List<BigInteger> assetId, byte[] data, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_BATCHSENDFROM, 
                Arrays.<Type>asList(new Address(from),
                to.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(to, Address.class)),
                assetId.isEmpty()? DynamicArray.empty("uint256[]"):new DynamicArray<Uint256>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(assetId, Uint256.class)),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String batchSendFromSeq(String from, List<String> to, List<BigInteger> assetId, byte[] data) {
        final Function function = new Function(
                FUNC_BATCHSENDFROM, 
                Arrays.<Type>asList(new Address(from),
                to.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(to, Address.class)),
                assetId.isEmpty()? DynamicArray.empty("uint256[]"):new DynamicArray<Uint256>(
                        org.fisco.bcos.web3j.abi.Utils.typeMap(assetId, Uint256.class)),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple4<String, List<String>, List<BigInteger>, byte[]> getBatchSendFromInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_BATCHSENDFROM, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<DynamicArray<Address>>() {}, new TypeReference<DynamicArray<Uint256>>() {}, new TypeReference<DynamicBytes>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple4<String, List<String>, List<BigInteger>, byte[]>(

                (String) results.get(0).getValue(), 
                convertToNative((List<Address>) results.get(1).getValue()), 
                convertToNative((List<Uint256>) results.get(2).getValue()), 
                (byte[]) results.get(3).getValue()
                );
    }

    public RemoteCall<String> description() {
        final Function function = new Function(FUNC_DESCRIPTION, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> destroy(BigInteger assetId, byte[] data) {
        final Function function = new Function(
                FUNC_DESTROY, 
                Arrays.<Type>asList(new Uint256(assetId),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void destroy(BigInteger assetId, byte[] data, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_DESTROY, 
                Arrays.<Type>asList(new Uint256(assetId),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String destroySeq(BigInteger assetId, byte[] data) {
        final Function function = new Function(
                FUNC_DESTROY, 
                Arrays.<Type>asList(new Uint256(assetId),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple2<BigInteger, byte[]> getDestroyInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_DESTROY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<DynamicBytes>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple2<BigInteger, byte[]>(

                (BigInteger) results.get(0).getValue(), 
                (byte[]) results.get(1).getValue()
                );
    }

    public RemoteCall<TransactionReceipt> generateBlindBoxCat(byte[] requestId) {
        final Function function = new Function(
                FUNC_GENERATEBLINDBOXCAT, 
                Arrays.<Type>asList(new Bytes32(requestId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void generateBlindBoxCat(byte[] requestId, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_GENERATEBLINDBOXCAT, 
                Arrays.<Type>asList(new Bytes32(requestId)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String generateBlindBoxCatSeq(byte[] requestId) {
        final Function function = new Function(
                FUNC_GENERATEBLINDBOXCAT, 
                Arrays.<Type>asList(new Bytes32(requestId)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple1<byte[]> getGenerateBlindBoxCatInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_GENERATEBLINDBOXCAT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple1<byte[]>(

                (byte[]) results.get(0).getValue()
                );
    }

    public RemoteCall<Tuple6<BigInteger, String, String, BigInteger, String, String>> generatedCats(BigInteger param0) {
        final Function function = new Function(FUNC_GENERATEDCATS, 
                Arrays.<Type>asList(new Uint256(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        return new RemoteCall<Tuple6<BigInteger, String, String, BigInteger, String, String>>(
                new Callable<Tuple6<BigInteger, String, String, BigInteger, String, String>>() {
                    @Override
                    public Tuple6<BigInteger, String, String, BigInteger, String, String> call() throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple6<BigInteger, String, String, BigInteger, String, String>(
                                (BigInteger) results.get(0).getValue(), 
                                (String) results.get(1).getValue(), 
                                (String) results.get(2).getValue(), 
                                (BigInteger) results.get(3).getValue(), 
                                (String) results.get(4).getValue(), 
                                (String) results.get(5).getValue());
                    }
                });
    }

    public RemoteCall<String> getApproved(BigInteger assetId) {
        final Function function = new Function(FUNC_GETAPPROVED, 
                Arrays.<Type>asList(new Uint256(assetId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<Tuple6<BigInteger, String, String, BigInteger, String, String>> getCatInfo(BigInteger catId) {
        final Function function = new Function(FUNC_GETCATINFO, 
                Arrays.<Type>asList(new Uint256(catId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Utf8String>() {}));
        return new RemoteCall<Tuple6<BigInteger, String, String, BigInteger, String, String>>(
                new Callable<Tuple6<BigInteger, String, String, BigInteger, String, String>>() {
                    @Override
                    public Tuple6<BigInteger, String, String, BigInteger, String, String> call() throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);
                        return new Tuple6<BigInteger, String, String, BigInteger, String, String>(
                                (BigInteger) results.get(0).getValue(), 
                                (String) results.get(1).getValue(), 
                                (String) results.get(2).getValue(), 
                                (BigInteger) results.get(3).getValue(), 
                                (String) results.get(4).getValue(), 
                                (String) results.get(5).getValue());
                    }
                });
    }

    public RemoteCall<BigInteger> getLength() {
        final Function function = new Function(FUNC_GETLENGTH, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<Boolean> isApprovedForAll(String owner, String operator) {
        final Function function = new Function(FUNC_ISAPPROVEDFORALL, 
                Arrays.<Type>asList(new Address(owner),
                new Address(operator)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<Boolean> isIssuer(String account) {
        final Function function = new Function(FUNC_ISISSUER, 
                Arrays.<Type>asList(new Address(account)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<Boolean> isOwner() {
        final Function function = new Function(FUNC_ISOWNER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<Boolean> isSuspender(String account) {
        final Function function = new Function(FUNC_ISSUSPENDER, 
                Arrays.<Type>asList(new Address(account)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<TransactionReceipt> issueWithAssetURI(String to, BigInteger assetId, String assetURI, byte[] data) {
        final Function function = new Function(
                FUNC_ISSUEWITHASSETURI, 
                Arrays.<Type>asList(new Address(to),
                new Uint256(assetId),
                new Utf8String(assetURI),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void issueWithAssetURI(String to, BigInteger assetId, String assetURI, byte[] data, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_ISSUEWITHASSETURI, 
                Arrays.<Type>asList(new Address(to),
                new Uint256(assetId),
                new Utf8String(assetURI),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String issueWithAssetURISeq(String to, BigInteger assetId, String assetURI, byte[] data) {
        final Function function = new Function(
                FUNC_ISSUEWITHASSETURI, 
                Arrays.<Type>asList(new Address(to),
                new Uint256(assetId),
                new Utf8String(assetURI),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple4<String, BigInteger, String, byte[]> getIssueWithAssetURIInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ISSUEWITHASSETURI, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}, new TypeReference<DynamicBytes>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple4<String, BigInteger, String, byte[]>(

                (String) results.get(0).getValue(), 
                (BigInteger) results.get(1).getValue(), 
                (String) results.get(2).getValue(), 
                (byte[]) results.get(3).getValue()
                );
    }

    public Tuple1<Boolean> getIssueWithAssetURIOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_ISSUEWITHASSETURI, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public RemoteCall<String> owner() {
        final Function function = new Function(FUNC_OWNER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<String> ownerOf(BigInteger assetId) {
        final Function function = new Function(FUNC_OWNEROF, 
                Arrays.<Type>asList(new Uint256(assetId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> renounceIssuer() {
        final Function function = new Function(
                FUNC_RENOUNCEISSUER, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void renounceIssuer(TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_RENOUNCEISSUER, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String renounceIssuerSeq() {
        final Function function = new Function(
                FUNC_RENOUNCEISSUER, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public RemoteCall<TransactionReceipt> renounceSuspender() {
        final Function function = new Function(
                FUNC_RENOUNCESUSPENDER, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void renounceSuspender(TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_RENOUNCESUSPENDER, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String renounceSuspenderSeq() {
        final Function function = new Function(
                FUNC_RENOUNCESUSPENDER, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public RemoteCall<TransactionReceipt> requestNewBlindboxCat(BigInteger userProvidedSeed, String name) {
        final Function function = new Function(
                FUNC_REQUESTNEWBLINDBOXCAT, 
                Arrays.<Type>asList(new Uint256(userProvidedSeed),
                new Utf8String(name)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void requestNewBlindboxCat(BigInteger userProvidedSeed, String name, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_REQUESTNEWBLINDBOXCAT, 
                Arrays.<Type>asList(new Uint256(userProvidedSeed),
                new Utf8String(name)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String requestNewBlindboxCatSeq(BigInteger userProvidedSeed, String name) {
        final Function function = new Function(
                FUNC_REQUESTNEWBLINDBOXCAT, 
                Arrays.<Type>asList(new Uint256(userProvidedSeed),
                new Utf8String(name)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple2<BigInteger, String> getRequestNewBlindboxCatInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REQUESTNEWBLINDBOXCAT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple2<BigInteger, String>(

                (BigInteger) results.get(0).getValue(), 
                (String) results.get(1).getValue()
                );
    }

    public Tuple1<byte[]> getRequestNewBlindboxCatOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_REQUESTNEWBLINDBOXCAT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple1<byte[]>(

                (byte[]) results.get(0).getValue()
                );
    }

    public RemoteCall<TransactionReceipt> sendFrom(String from, String to, BigInteger assetId, byte[] data) {
        final Function function = new Function(
                FUNC_SENDFROM, 
                Arrays.<Type>asList(new Address(from),
                new Address(to),
                new Uint256(assetId),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void sendFrom(String from, String to, BigInteger assetId, byte[] data, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_SENDFROM, 
                Arrays.<Type>asList(new Address(from),
                new Address(to),
                new Uint256(assetId),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String sendFromSeq(String from, String to, BigInteger assetId, byte[] data) {
        final Function function = new Function(
                FUNC_SENDFROM, 
                Arrays.<Type>asList(new Address(from),
                new Address(to),
                new Uint256(assetId),
                new DynamicBytes(data)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple4<String, String, BigInteger, byte[]> getSendFromInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SENDFROM, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<DynamicBytes>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple4<String, String, BigInteger, byte[]>(

                (String) results.get(0).getValue(), 
                (String) results.get(1).getValue(), 
                (BigInteger) results.get(2).getValue(), 
                (byte[]) results.get(3).getValue()
                );
    }

    public RemoteCall<TransactionReceipt> setApprovalForAll(String to, Boolean approved) {
        final Function function = new Function(
                FUNC_SETAPPROVALFORALL, 
                Arrays.<Type>asList(new Address(to),
                new Bool(approved)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void setApprovalForAll(String to, Boolean approved, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_SETAPPROVALFORALL, 
                Arrays.<Type>asList(new Address(to),
                new Bool(approved)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String setApprovalForAllSeq(String to, Boolean approved) {
        final Function function = new Function(
                FUNC_SETAPPROVALFORALL, 
                Arrays.<Type>asList(new Address(to),
                new Bool(approved)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple2<String, Boolean> getSetApprovalForAllInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SETAPPROVALFORALL, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple2<String, Boolean>(

                (String) results.get(0).getValue(), 
                (Boolean) results.get(1).getValue()
                );
    }

    public RemoteCall<String> shortName() {
        final Function function = new Function(FUNC_SHORTNAME, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> suspend() {
        final Function function = new Function(
                FUNC_SUSPEND, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void suspend(TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_SUSPEND, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String suspendSeq() {
        final Function function = new Function(
                FUNC_SUSPEND, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public RemoteCall<Boolean> suspended() {
        final Function function = new Function(FUNC_SUSPENDED, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<BigInteger> totalSupply() {
        final Function function = new Function(FUNC_TOTALSUPPLY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<TransactionReceipt> transferOwnership(String newOwner) {
        final Function function = new Function(
                FUNC_TRANSFEROWNERSHIP, 
                Arrays.<Type>asList(new Address(newOwner)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void transferOwnership(String newOwner, TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_TRANSFEROWNERSHIP, 
                Arrays.<Type>asList(new Address(newOwner)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String transferOwnershipSeq(String newOwner) {
        final Function function = new Function(
                FUNC_TRANSFEROWNERSHIP, 
                Arrays.<Type>asList(new Address(newOwner)),
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    public Tuple1<String> getTransferOwnershipInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_TRANSFEROWNERSHIP, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());;
        return new Tuple1<String>(

                (String) results.get(0).getValue()
                );
    }

    public RemoteCall<TransactionReceipt> unSuspend() {
        final Function function = new Function(
                FUNC_UNSUSPEND, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public void unSuspend(TransactionSucCallback callback) {
        final Function function = new Function(
                FUNC_UNSUSPEND, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String unSuspendSeq() {
        final Function function = new Function(
                FUNC_UNSUSPEND, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createTransactionSeq(function);
    }

    @Deprecated
    public static CatBlindbox load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new CatBlindbox(contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    @Deprecated
    public static CatBlindbox load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new CatBlindbox(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    public static CatBlindbox load(String contractAddress, Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider) {
        return new CatBlindbox(contractAddress, web3j, credentials, contractGasProvider);
    }

    public static CatBlindbox load(String contractAddress, Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider) {
        return new CatBlindbox(contractAddress, web3j, transactionManager, contractGasProvider);
    }

    public static RemoteCall<CatBlindbox> deploy(Web3j web3j, Credentials credentials, ContractGasProvider contractGasProvider, String randomOracle) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new Address(randomOracle)));
        return deployRemoteCall(CatBlindbox.class, web3j, credentials, contractGasProvider, getBinary(), encodedConstructor);
    }

    public static RemoteCall<CatBlindbox> deploy(Web3j web3j, TransactionManager transactionManager, ContractGasProvider contractGasProvider, String randomOracle) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new Address(randomOracle)));
        return deployRemoteCall(CatBlindbox.class, web3j, transactionManager, contractGasProvider, getBinary(), encodedConstructor);
    }

    @Deprecated
    public static RemoteCall<CatBlindbox> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit, String randomOracle) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new Address(randomOracle)));
        return deployRemoteCall(CatBlindbox.class, web3j, credentials, gasPrice, gasLimit, getBinary(), encodedConstructor);
    }

    @Deprecated
    public static RemoteCall<CatBlindbox> deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit, String randomOracle) {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new Address(randomOracle)));
        return deployRemoteCall(CatBlindbox.class, web3j, transactionManager, gasPrice, gasLimit, getBinary(), encodedConstructor);
    }

    public static class ApprovalEventResponse {
        public Log log;

        public String owner;

        public String approved;

        public BigInteger assetId;
    }

    public static class ApprovalForAllEventResponse {
        public Log log;

        public String owner;

        public String operator;

        public Boolean approved;
    }

    public static class IssuerAddedEventResponse {
        public Log log;

        public String account;
    }

    public static class IssuerRemovedEventResponse {
        public Log log;

        public String account;
    }

    public static class OwnershipTransferredEventResponse {
        public Log log;

        public String previousOwner;

        public String newOwner;
    }

    public static class ResultOfNewBlindboxCatEventResponse {
        public Log log;

        public String sender;

        public String catName;

        public byte[] requestId;
    }

    public static class SendEventResponse {
        public Log log;

        public String operator;

        public String from;

        public String to;

        public BigInteger assetId;

        public byte[] data;
    }

    public static class SurpriseCatEventResponse {
        public Log log;

        public byte[] requestId;

        public String name;

        public String series;

        public BigInteger birthTime;

        public String owner;

        public String images;
    }

    public static class SuspendedEventResponse {
        public Log log;

        public String account;
    }

    public static class SuspenderAddedEventResponse {
        public Log log;

        public String account;
    }

    public static class SuspenderRemovedEventResponse {
        public Log log;

        public String account;
    }

    public static class UnSuspendedEventResponse {
        public Log log;

        public String account;
    }
}
